package controles;

import java.util.ArrayList;
import juego.Escenario;
import objetos.aeronaves.*;
import objetos.powerUps.PowerUp;
import objetos.proyectiles.Proyectil;

/*
 * Control que se encarga de recorrer las listas de objetos no controlados,
 * removiendo los objetos que est�n destruidos.
 */
public class ControlRemoverDestruidos implements Control {

	public void ejecutar() {
		this.removerCivilesMuertos();
		this.removerEnemigosMuertos();
		this.removerProyectilesAliadosMuertos();
		this.removerProyectilesEnemigosMuertos();
		this.removerPowerUpsMuertos();
	}

	private void removerCivilesMuertos() {
		ArrayList<Civil> civiles = Escenario.getInstance().getCiviles();
		int largo = civiles.size();
		Civil civil;
		ArrayList<Civil> muertos = new ArrayList<Civil>();

		for (int i = 0; i < largo; i++) {
			civil = civiles.get(i);
			if (civil.estaDestruido()) {
				muertos.add(civil);
			}
		}
		for (int i = 0; i < muertos.size(); i++) {
			civiles.remove(muertos.get(i));
		}
	}

	private void removerEnemigosMuertos() {
		ArrayList<Enemigo> enemigos = Escenario.getInstance().getEnemigos();
		int largo = enemigos.size();
		Enemigo enemigo;
		ArrayList<Enemigo> muertos = new ArrayList<Enemigo>();

		for (int i = 0; i < largo; i++) {
			enemigo = enemigos.get(i);
			if (enemigo.estaDestruido()) {
				muertos.add(enemigo);
			}
		}
		for (int i = 0; i < muertos.size(); i++) {
			enemigos.remove(muertos.get(i));
		}
	}

	private void removerProyectilesAliadosMuertos() {
		ArrayList<Proyectil> proyectiles = Escenario.getInstance()
				.getProyectilesDelAlgo42();
		int largo = proyectiles.size();
		Proyectil proyectil;
		ArrayList<Proyectil> muertos = new ArrayList<Proyectil>();

		for (int i = 0; i < largo; i++) {
			proyectil = proyectiles.get(i);
			if (proyectil.estaDestruido()) {
				muertos.add(proyectil);
			}
		}
		for (int i = 0; i < muertos.size(); i++) {
			proyectiles.remove(muertos.get(i));
		}
	}

	private void removerProyectilesEnemigosMuertos() {
		ArrayList<Proyectil> proyectiles = Escenario.getInstance()
				.getProyectilesEnemigos();
		int largo = proyectiles.size();
		Proyectil proyectil;
		ArrayList<Proyectil> muertos = new ArrayList<Proyectil>();

		for (int i = 0; i < largo; i++) {
			proyectil = proyectiles.get(i);
			if (proyectil.estaDestruido()) {
				muertos.add(proyectil);
			}
		}
		for (int i = 0; i < muertos.size(); i++) {
			proyectiles.remove(muertos.get(i));
		}
	}

	private void removerPowerUpsMuertos() {
		ArrayList<PowerUp> powerUps = Escenario.getInstance().getPowerUps();
		int largo = powerUps.size();
		PowerUp powerUp;
		ArrayList<PowerUp> muertos = new ArrayList<PowerUp>();

		for (int i = 0; i < largo; i++) {
			powerUp = powerUps.get(i);
			if (powerUp.estaDestruido()) {
				muertos.add(powerUp);
			}
		}
		for (int i = 0; i < muertos.size(); i++) {
			powerUps.remove(muertos.get(i));
		}
	}

}
